#ifndef xpack_meta_integer_type
#define xpack_meta_integer_type
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::meta_integer_type::inc
#include"define/base_type.hpp"
#include"macro/xexport.hpp"
#pragma pop_macro("xuser")

namespace mixc::meta_integer_type{
    template<uxx, bool is_unsigned>
    struct meta{};

    template<> struct meta<1, false> { using result = i08; };
    template<> struct meta<2, false> { using result = i16; };
    template<> struct meta<4, false> { using result = i32; };
    template<> struct meta<8, false> { using result = i64; };

    template<> struct meta<1, true> { using result = u08; };
    template<> struct meta<2, true> { using result = u16; };
    template<> struct meta<4, true> { using result = u32; };
    template<> struct meta<8, true> { using result = u64; };

    template<class type_t>
    using integer_type = typename meta<sizeof(type_t), (type_t(-1) > type_t(0))>::result;
}

#endif

xexport(mixc::meta_integer_type::integer_type)